package com.tuanzhang.mall.goods.infrastructure.repository;

import com.tuanzhang.mall.goods.domain.aggregate.Spu;
import com.tuanzhang.mall.goods.domain.valueobj.SpuCode;
import com.tuanzhang.mall.seller.domain.aggregate.Seller;

import java.util.List;

public interface SpuRepository {

    /**
     * 保存
     *
     * @param spu 要保存的卖家对象
     */
    void save(Spu spu);

    /**
     * 保存或更新
     *
     * @param spu
     */
    void saveOrUpdate(Spu spu);

    /**
     * 根据ID查找用例
     *
     * @param spuCode 用例的唯一标识符
     * @return 返回找到的对象，如果不存在则返回null
     */
    Spu findBySpuCode(SpuCode spuCode);

    /**
     * 批量查询
     *
     * @param spuCodes 用例的唯一标识符列表
     * @return 返回找到的列表，如果某些用例不存在，则不会包含在返回列表中
     */
    List<Spu> batchQuery(List<SpuCode> spuCodes);

    /**
     * 删除
     *
     * @param spuCode) 唯一标识符
     */
    void delete(SpuCode spuCode);

    /**
     * 更新用例
     *
     * @param spu 要更新对象
     */
    void update(Spu spu);

    /**
     * 根据唯一标识符判断是否存在
     *
     * @param spuCode 唯一标识符
     * @return 如果存在则返回true，否则返回false
     */
    boolean exists(SpuCode spuCode);

    int getRecommentCount(SpuCode spuCode);
}
